synchronized Keyword এর ব্যবহার

Java Technologies - জাভা কনকারেন্সি (Java Concurrency) - Synchronization এবং Locks
219

জাভাতে synchronized কীওয়ার্ড থ্রেড-সেফটি নিশ্চিত করার জন্য ব্যবহৃত হয়। এটি একটি মিউচুয়াল এক্সক্লুশন মেকানিজম প্রদান করে যা একাধিক থ্রেডকে একই সময়ে একটি ক্রিটিক্যাল সেকশন অ্যাক্সেস করতে বাধা দেয়।


synchronized কীওয়ার্ডের বৈশিষ্ট্য

  1. থ্রেড-সেফিটি নিশ্চিত করা: একাধিক থ্রেড একই সময়ে শেয়ারড রিসোর্সে অ্যাক্সেস করতে পারবে না।
  2. মেমরি ভিজিবিলিটি নিশ্চিত করা: এক থ্রেড দ্বারা করা পরিবর্তন অন্য থ্রেডের জন্য দৃশ্যমান হবে।
  3. মিউচুয়াল এক্সক্লুশন: এক সময়ে শুধুমাত্র একটি থ্রেড সিঙ্ক্রোনাইজড ব্লকে প্রবেশ করতে পারে।

synchronized কীভাবে কাজ করে?

Synchronized মূলত মনিটর লক (Monitor Lock) ব্যবহার করে। যখন একটি থ্রেড synchronized ব্লকে প্রবেশ করে, তখন এটি একটি লক অর্জন করে। কাজ শেষ হলে লকটি মুক্ত করে।


synchronized ব্যবহার করার উপায়

১. সিঙ্ক্রোনাইজড মেথড (Synchronized Method)

পুরো মেথড সিঙ্ক্রোনাইজড করা হলে, এটি একসাথে একাধিক থ্রেড দ্বারা অ্যাক্সেসযোগ্য হয় না।

class SynchronizedMethodExample {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public synchronized int getCount() {
        return count;
    }
}

২. সিঙ্ক্রোনাইজড ব্লক (Synchronized Block)

শুধুমাত্র কোডের একটি নির্দিষ্ট অংশ সিঙ্ক্রোনাইজড করতে ব্যবহার করা হয়। এটি কার্যক্ষমতা উন্নত করতে সাহায্য করে।

class SynchronizedBlockExample {
    private int count = 0;

    public void increment() {
        synchronized (this) { // সিঙ্ক্রোনাইজড ব্লক
            count++;
        }
    }

    public int getCount() {
        synchronized (this) {
            return count;
        }
    }
}

৩. স্ট্যাটিক মেথডে সিঙ্ক্রোনাইজড (Synchronized Static Method)

স্ট্যাটিক মেথড সিঙ্ক্রোনাইজড হলে, এটি ক্লাস লেভেলে লক ধরে।

class SynchronizedStaticMethodExample {
    private static int count = 0;

    public static synchronized void increment() {
        count++;
    }

    public static synchronized int getCount() {
        return count;
    }
}

৪. কাস্টম অবজেক্টে সিঙ্ক্রোনাইজড

যদি আপনি this এর পরিবর্তে একটি কাস্টম অবজেক্টে লক ধরে রাখতে চান, তাহলে এটি ব্যবহার করা হয়।

class CustomLockExample {
    private final Object lock = new Object();
    private int count = 0;

    public void increment() {
        synchronized (lock) { // কাস্টম লক
            count++;
        }
    }

    public int getCount() {
        synchronized (lock) {
            return count;
        }
    }
}

প্রকৃত উদাহরণ

মাল্টি-থ্রেডিংয়ে সিঙ্ক্রোনাইজড ব্যবহার

class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public synchronized int getCount() {
        return count;
    }
}

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Counter counter = new Counter();

        // থ্রেড তৈরি
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                counter.increment();
            }
        });

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                counter.increment();
            }
        });

        t1.start();
        t2.start();

        t1.join();
        t2.join();

        // সঠিক রেজাল্ট
        System.out.println("Final Count: " + counter.getCount());
    }
}

synchronized এর সুবিধা ও অসুবিধা

সুবিধা:

  1. থ্রেড-সেফটি: একাধিক থ্রেডের জন্য ডেটা কনসিসটেন্সি নিশ্চিত করে।
  2. সহজতর সিঙ্ক্রোনাইজেশন: জটিল লক ব্যবস্থাপনার প্রয়োজন নেই।

অসুবিধা:

  1. পারফরম্যান্স ইস্যু: অতিরিক্ত লকিং অ্যাপ্লিকেশনের গতি কমিয়ে দিতে পারে।
  2. ডেডলক ঝুঁকি: ভুল লকিং ডেডলক পরিস্থিতি তৈরি করতে পারে।
  3. কমপ্লেক্সিটি: বড় কোডবেসে সঠিক সিঙ্ক্রোনাইজেশন বজায় রাখা কঠিন হতে পারে।

synchronized এবং Java Memory Model (JMM)

  • JMM নিশ্চিত করে যে synchronized ব্লকের মধ্যে পরিবর্তনগুলো মেইন মেমরিতে ফ্লাশ হয় এবং অন্যান্য থ্রেড সেগুলো দেখতে পায়।
  • এটি হ্যাপেন্স-বিফোর (Happens-Before) সম্পর্ক ব্যবহার করে থ্রেডগুলোর মধ্যে সঠিক এক্সিকিউশন অর্ডার নিশ্চিত করে।

  • জাভা কনকারেন্সি ম্যানেজ করার জন্য synchronized একটি গুরুত্বপূর্ণ টুল।
  • শুধুমাত্র সেই অংশ সিঙ্ক্রোনাইজ করুন যা থ্রেড-সেফ হওয়া প্রয়োজন।
  • অতিরিক্ত লকিং এড়িয়ে কার্যক্ষমতা উন্নত করতে চেষ্টা করুন।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...